package santeclair.referentiel.optique.model;

import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.UniqueConstraint;

import santeclair.lunar.framework.annotation.Code;
import santeclair.lunar.framework.annotation.HashCodeEquals;
import santeclair.lunar.framework.annotation.ToString;
import santeclair.lunar.framework.util.EqualsUtils;
import santeclair.lunar.framework.util.HashCodeUtils;
import santeclair.lunar.framework.util.ToStringUtils;
import santeclair.referentiel.optique.config.Constant;

@Entity
@Table(name = "tr_fabricant_optique", catalog = Constant.SCHEMA_NAME, uniqueConstraints = @UniqueConstraint(columnNames = "code_fabricant_optique"))
public class FabricantOptique implements java.io.Serializable {

    private static final long serialVersionUID = -6917283351680831967L;

    @Id
    @Column(name = "identifiant_fabricant_optique", unique = true, nullable = false)
    @ToString
    @HashCodeEquals
    private Integer identifiantFabricantOptique;

    @Code
    @Column(name = "code_fabricant_optique", unique = true, nullable = false, length = 10)
    @ToString
    @HashCodeEquals
    private String codeFabricantOptique;

    @Column(name = "code_opto10_fabricant_optique", unique = false, nullable = false, length = 50)
    @ToString
    @HashCodeEquals
    private String codeOpto10FabricantOptique;

    @Column(name = "libelle_fabricant_optique", nullable = false)
    @ToString
    @HashCodeEquals
    private String libelleFabricantOptique;

    @OneToMany(mappedBy = "fabricantOptique", fetch = FetchType.EAGER, cascade = CascadeType.ALL, orphanRemoval = true)
    /* Ne pas ajouter les annotations @ToString et @HashCodeEquals reference cyclique */
    private Set<GrilleTarifaire> grilleTarifaires = new HashSet<>();

    public FabricantOptique() {
    }

    public Integer getIdentifiant() {
        return this.identifiantFabricantOptique;
    }

    public void setIdentifiant(Integer identifiantFabricantOptique) {
        this.identifiantFabricantOptique = identifiantFabricantOptique;
    }

    public String getCodeFabricantOptique() {
        return this.codeFabricantOptique;
    }

    public void setCodeFabricantOptique(String codeFabricantOptique) {
        this.codeFabricantOptique = codeFabricantOptique;
    }

    public String getCodeOpto10FabricantOptique() {
        return codeOpto10FabricantOptique;
    }

    public void setCodeOpto10FabricantOptique(String codeOpto10FabricantOptique) {
        this.codeOpto10FabricantOptique = codeOpto10FabricantOptique;
    }

    public String getLibelle() {
        return this.libelleFabricantOptique;
    }

    public void setLibelle(String libelleFabricantOptique) {
        this.libelleFabricantOptique = libelleFabricantOptique;
    }

    public Set<GrilleTarifaire> getGrilleTarifaires() {
        return grilleTarifaires;
    }

    public void setGrilleTarifaires(Set<GrilleTarifaire> grilleTarifaires) {
        this.grilleTarifaires = grilleTarifaires;
    }

    @Override
    public String toString() {
        return ToStringUtils.toString(this);
    }

    @Override
    public int hashCode() {
        return HashCodeUtils.hashCode(this);
    }

    @Override
    public boolean equals(Object obj) {
        return EqualsUtils.isEqual(this, obj);
    }

}
